/*! @file data_structures.h
 *        @brief user_input : data structure that just stores user input parameters
*/

/* Structure that store information about user preferences for this benchmark */
struct user_input
{
	/* name of matrix market file of Matrix A*/
	char mat_A_file[100];

	/* name of matrix market file of Vector b*/
	char vec_b_file[100];
	
	/* Max no of iterations for iterative solver */
	long int max_iterations;

	/* tolerance param for solver */
	double tolerance;

	/* Do we want to output residual norm every iteration */
	int is_verbose;
	
	/* restart method after these iterations */
	int restart;

	/* Do we have solution Vector */
        int load_b_from_file;

	/* Do we want to benchmark on the Host i.e. CPU */
	int benchmark_host;

}input_options;

/* Is solution vector already setup ? */
int is_b_setup;

/* Vectors on the GPU that represent x and b for linear system of equation Ax=b */
cusp::array1d<float, cusp::device_memory> x;
cusp::array1d<float, cusp::device_memory> b;

/* Matrix A on the host in CSR format*/
cusp::csr_matrix<int, float, cusp::host_memory> A_Host;

/* Vectors on the GPU that represent x and b for linear system of equation Ax=b */
cusp::array1d<float, cusp::host_memory> x_host;
cusp::array1d<float, cusp::host_memory> b_host;


/* which benchmark we want to use*/
int CONVERSION_BENCHMARK = 0;
int SOLVER_BENCHMARK     = 0;
